//
// Created by ct on 2020/10/10.
//

#ifndef HTTPSERVER_REQUEST_HANDLER_H
#define HTTPSERVER_REQUEST_HANDLER_H

#include <string>
#include "router.h"

namespace http {
    namespace server {
        struct reply;
        struct request;
        class request_handler {

        public:
            // delete表示删除默认拷贝构造函数，即不能进行默认拷贝
            request_handler(const request_handler&) = delete;
            request_handler & operator = (const request_handler&) = delete;


            // 构造包含要服务的文件的目录。
            explicit  request_handler(std::string doc_root,const router::node& http_router);

            // 处理请求并生成回复。
             void handle_request(const request& req, reply& rep);
        private:
            /// 包含要服务的文件的目录。
            std::string doc_root_;

            /// 对字符串执行URL解码。
            /// 如果编码为无效返回false。
            static bool url_decode(const std::string &in, std::string &out);

            /// 路由控制

            router::node http_router_;

        };

    } // namespace server
} // namespace http
#endif //HTTPSERVER_REQUEST_HANDLER_H
